package com.tdam2014.grupo11;

import org.utnrepasa.net.principal.ControladorCliente;
import org.utnrepasa.net.util.Question;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class ActivityPregunta extends Activity {

	private TextView txtPregunta, txtNroPregunta;
	private Button btn1, btn2, btn3, btn4;
	private ProgressBar barTiempo;
	private Question pregunta;
	private ControladorCliente controlador;
	private Cronometro cronometro;
	private boolean respuestaEnviada;
	private static final int CANTIDAD_SEGUNDOS_RESPONDER = 20;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_pregunta);
		txtPregunta = (TextView) super.findViewById(R.id.txtPregunta);
		txtNroPregunta = (TextView) findViewById(R.id.txtNroPregunta);
		barTiempo = (ProgressBar) findViewById(R.id.barTiempo);
		btn1 = (Button) super.findViewById(R.id.btn1);
		btn1.setOnClickListener(new EscuchadorOpcionElegida(0, btn1));
		btn2 = (Button) super.findViewById(R.id.btn2);
		btn2.setOnClickListener(new EscuchadorOpcionElegida(1, btn2));
		btn3 = (Button) super.findViewById(R.id.btn3);
		btn3.setOnClickListener(new EscuchadorOpcionElegida(2, btn3));
		btn4 = (Button) super.findViewById(R.id.btn4);
		btn4.setOnClickListener(new EscuchadorOpcionElegida(3, btn4));
		respuestaEnviada = false;
		controlador = ControladorCliente.getInstancia(this);
		if (controlador.hayPreguntas()) {
			controlador.getSiguientePregunta();
			txtNroPregunta.setText("Pregunta "
					+ (controlador.getCantidadRespuestas() + 1) + "/"
					+ controlador.getCantidadPreguntas());
		} else {
			controlador.solicitarPreguntas();
		}
		cronometro = new Cronometro();
		barTiempo.setMax(100);
		// barTiempo.setProgress(100);
		cronometro.execute(CANTIDAD_SEGUNDOS_RESPONDER);
	}

	public void recibirPregunta(final Question pregunta) {
		this.pregunta = pregunta;
		runOnUiThread(new Runnable() {

			@Override
			public void run() {
				txtPregunta.setText(pregunta.getDescription());
				btn1.setText(pregunta.getOptions().get(0));
				btn2.setText(pregunta.getOptions().get(1));
				btn3.setText(pregunta.getOptions().get(2));
				btn4.setText(pregunta.getOptions().get(3));
				txtNroPregunta.setText(controlador.getCantidadRespuestas()
						+ "/" + controlador.getCantidadPreguntas());
			}
		});
	}

	class EscuchadorOpcionElegida implements OnClickListener {
		private int opcion;
		private Button btnElegido;

		public EscuchadorOpcionElegida(int opcion, Button btnElegido) {
			this.opcion = opcion;
			this.btnElegido = btnElegido;
		}

		@Override
		public void onClick(View v) {
			if (respuestaEnviada == false) {
				respuestaEnviada = true;
				controlador.setRespuesta(opcion);
				cronometro.cancel(true);
				if (pregunta.getCorrectOption() == opcion) {
					Toast.makeText(ActivityPregunta.this, "Correcto",
							Toast.LENGTH_SHORT).show();
					btnElegido.getBackground().setColorFilter(Color.GREEN,
							PorterDuff.Mode.MULTIPLY);
				} else {
					Toast.makeText(ActivityPregunta.this, "Incorrecto",
							Toast.LENGTH_SHORT).show();
					btnElegido.getBackground().setColorFilter(Color.RED,
							PorterDuff.Mode.MULTIPLY);
				}
				new Thread(new Runnable() {

					@Override
					public void run() {
						try {
							Thread.sleep(1000);
							Intent intent = new Intent(ActivityPregunta.this,
									CalificarPregunta.class);
							startActivity(intent);
						} catch (final InterruptedException e) {
							runOnUiThread(new Runnable() {

								@Override
								public void run() {
									Toast.makeText(ActivityPregunta.this,
											e.getMessage(), Toast.LENGTH_SHORT)
											.show();
								}
							});
						}
					}
				}).start();
			}
		}
	}

	protected class Cronometro extends AsyncTask<Integer, Integer, String> {
		@Override
		protected String doInBackground(Integer... params) {
			int i = params[0];
			while (i >= 0) {
				try {
					Thread.sleep(1000);
					publishProgress(i);
					i--;
				} catch (Exception e) {
					Log.i("ActivityPregunta", e.getMessage());
				}
			}
			return "Se acabo el tiempo!";
		}

		@Override
		protected void onPreExecute() {
			super.onPreExecute();
		}

		@Override
		protected void onCancelled() {
			super.onCancelled();
		}

		@Override
		protected void onProgressUpdate(Integer... values) {
			super.onProgressUpdate(values);
			int progresoActual = values[0];
			barTiempo.setProgress((progresoActual) * (100)
					/ (CANTIDAD_SEGUNDOS_RESPONDER));
		}

		@Override
		protected void onPostExecute(String result) {
			super.onPostExecute(result);
			controlador.setRespuesta(-1);
			Intent intent = new Intent(ActivityPregunta.this,
					CalificarPregunta.class);
			startActivity(intent);
		}
	}

}
